home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / pcrob13.zip / LIB / PCROBOTS.PAS < prev   
Pascal/Delphi Source File  |  1992-11-01  |  6KB  |  329 lines

  1. unit PCRobots;
  2.  
  3. interface
  4.  
  5. const    ARENA_FREE=0;
  6.          ARENA_WALL=1;
  7.          ARENA_DAMAGE=3;
  8.          ARENA_REFUEL=30;
  9.          SHELL_MISSED=0;
  10.          SHELL_HIT_WALL=1;
  11.          SHELL_CLOSE_BLAST=2;
  12.          SHELL_NEAR_MISS=3;
  13.          SHELL_DIRECT_HIT=4;
  14.  
  15.  
  16. type      Pattern_buffer=array[0..5] of shortint;
  17.           Patbuf_ptr=^Pattern_buffer;
  18.           Map_buffer=array[0..8,0..8] of shortint;
  19.           Mapbuf_ptr=^Map_buffer;
  20.  
  21. procedure Swaptask;
  22. procedure Movement(speed,angle:integer);
  23. function  Scan(angle,res:integer;var range:integer):integer;
  24. function  Shoot(angle,range:integer):integer;
  25. procedure Getxy(var x,y:integer);
  26. function  Transmit(target,data:integer):integer;
  27. function  Receive(var source,data:integer):integer;
  28. function  Damage:integer;
  29. function  Speed:integer;
  30. function  Battery:integer;
  31. function  Ticks:longint;
  32. function  L_Sin(angle:integer):longint;
  33. function  L_Cos(angle:integer):longint;
  34. function  L_Tan(angle:integer):longint;
  35. function  L_Atan(ratio:longint):integer;
  36. function  L_Sqrt(value:longint):longint;
  37. procedure Set_Pattern(Buffer:Patbuf_ptr);
  38. procedure Debug_Flag(flag,setflag:integer);
  39. procedure Buy_Armour(armour_units:integer);
  40. procedure Buy_Shells(shells:word);
  41. function  Shells_Left:integer;
  42. procedure Get_Local_Map(ptr:MapBuf_ptr);
  43. procedure Invisibility(invis_flag:integer);
  44. function  Get_Shell_Status:integer;
  45. function  IsInvisible:integer;
  46. function  L_Atan2(y,x:integer):integer;
  47. function    Configure(speed,manouevre,range,armour,acceleration,invisibility:integer):integer;
  48.  
  49. implementation
  50.  
  51. uses DOS;
  52.  
  53. procedure Swaptask;
  54.  var regs:Registers;
  55. BEGIN
  56.  regs.ax:=0;
  57.  intr($e0,regs);
  58. END;
  59.  
  60. procedure Movement(speed,angle:integer);
  61.  var regs:Registers;
  62. BEGIN
  63.  regs.ax:=1;
  64.  regs.bx:=speed;
  65.  regs.cx:=angle;
  66.  intr($e0,regs);
  67. END;
  68.  
  69. function  Scan(angle,res:integer;var range:integer):integer;
  70.  var regs:Registers;
  71. BEGIN
  72.  regs.ax:=2;
  73.  regs.bx:=angle;
  74.  regs.cx:=res;
  75.  intr($e0,regs);
  76.  range:=regs.bx;
  77.  Scan:=regs.ax;
  78. END;
  79.  
  80. function  Shoot(angle,range:integer):integer;
  81.  var regs:Registers;
  82. BEGIN
  83.  regs.ax:=3;
  84.  regs.bx:=angle;
  85.  regs.cx:=range;
  86.  intr($e0,regs);
  87.  Shoot:=regs.ax;
  88. END;
  89.  
  90. procedure Get_Remote_Map(ptr:MapBuf_ptr;x,y:integer);
  91.  var regs:Registers;
  92. BEGIN
  93.  regs.ax:=$21;
  94.  regs.bx:=seg(ptr^);
  95.  regs.cx:=ofs(ptr^);
  96.  regs.dh:=x;
  97.  regs.dl:=y;
  98.  intr($e0,regs);
  99. END;
  100.  
  101. procedure Getxy(var x,y:integer);
  102.  var regs:Registers;
  103. BEGIN
  104.  regs.ax:=$10;
  105.  intr($e0,regs);
  106.  x:=regs.bx;
  107.  y:=regs.cx;
  108. END;
  109.  
  110. function  Transmit(target,data:integer):integer;
  111.  var regs:Registers;
  112. BEGIN
  113.  regs.ax:=$11;
  114.  regs.bx:=target;
  115.  regs.cx:=data;
  116.  intr($e0,regs);
  117.  Transmit:=regs.ax;
  118. END;
  119.  
  120. function  Receive(var source,data:integer):integer;
  121.  var regs:Registers;
  122. BEGIN
  123.  regs.ax:=$12;
  124.  intr($e0,regs);
  125.  source:=regs.bx;
  126.  data:=regs.cx;
  127.  Receive:=regs.ax;
  128. END;
  129.  
  130. function  Damage:integer;
  131.  var regs:Registers;
  132. BEGIN
  133.  regs.ax:=$13;
  134.  intr($e0,regs);
  135.  Damage:=regs.bx;
  136. END;
  137.  
  138. function  Speed:integer;
  139.  var regs:Registers;
  140. BEGIN
  141.  regs.ax:=$14;
  142.  intr($e0,regs);
  143.  Speed:=regs.bx;
  144. END;
  145.  
  146. function  Battery:integer;
  147.  var regs:Registers;
  148. BEGIN
  149.  regs.ax:=$15;
  150.  intr($e0,regs);
  151.  Battery:=regs.bx;
  152. END;
  153.  
  154. function  Ticks:longint;
  155.  var regs:Registers;
  156. BEGIN
  157.  regs.ax:=$16;
  158.  intr($e0,regs);
  159.  Ticks:=(regs.bx shl 16)+regs.cx;
  160. END;
  161.  
  162. function  L_Sin(angle:integer):longint;
  163.  var regs:Registers;
  164. BEGIN
  165.  regs.ax:=$17;
  166.  regs.bx:=angle;
  167.  intr($e0,regs);
  168.  L_Sin:=((longint)regs.bx shl 16)+regs.cx;
  169. END;
  170.  
  171. function  L_Cos(angle:integer):longint;
  172.  var regs:Registers;
  173. BEGIN
  174.  regs.ax:=$18;
  175.  regs.bx:=angle;
  176.  intr($e0,regs);
  177.  L_Cos:=((longint)regs.bx shl 16)+regs.cx;
  178. END;
  179.  
  180. function  L_Tan(angle:integer):longint;
  181.  var regs:Registers;
  182. BEGIN
  183.  regs.ax:=$19;
  184.  regs.bx:=angle;
  185.  intr($e0,regs);
  186.  L_Tan:=((longint)regs.bx shl 16)+regs.cx;
  187. END;
  188.  
  189. function  L_Atan(ratio:longint):integer;
  190.  var regs:Registers;
  191. BEGIN
  192.  regs.ax:=$1a;
  193.  regs.bx:=(ratio shr 16);
  194.  regs.cx:=(ratio and $ffff);
  195.  intr($e0,regs);
  196.  L_Atan:=regs.ax;
  197. END;
  198.  
  199. function  L_Sqrt(value:longint):longint;
  200.  var regs:Registers;
  201. BEGIN
  202.  regs.ax:=$1b;
  203.  regs.bx:=(value shr 16);
  204.  regs.cx:=(value and $ffff);
  205.  intr($e0,regs);
  206.  L_Sqrt:=((longint)regs.bx shl 16)+regs.cx;
  207. END;
  208.  
  209. procedure Set_Pattern(Buffer:Patbuf_ptr);
  210.  var regs:Registers;
  211. BEGIN
  212.  regs.ax:=$1c;
  213.  regs.bx:=seg(Buffer^);
  214.  regs.cx:=ofs(Buffer^);
  215.  intr($e0,regs);
  216. END;
  217.  
  218. procedure Debug_Flag(flag,setflag:integer);
  219.  var regs:Registers;
  220. BEGIN
  221.  regs.ax:=$1d;
  222.  regs.bx:=flag;
  223.  regs.cx:=setflag;
  224.  intr($e0,regs);
  225. END;
  226.  
  227. procedure Buy_Armour(armour_units:integer);
  228.  var regs:Registers;
  229. BEGIN
  230.  regs.ax:=$1e;
  231.  regs.bx:=armour_units;
  232.  intr($e0,regs);
  233. END;
  234.  
  235. procedure Buy_Shells(shells:word);
  236.  var regs:Registers;
  237. BEGIN
  238.  regs.ax:=$1f;
  239.  regs.bx:=shells;
  240.  intr($e0,regs);
  241. END;
  242.  
  243. function  Shells_Left:integer;
  244.  var regs:Registers;
  245. BEGIN
  246.  regs.ax:=$20;
  247.  intr($e0,regs);
  248.  Shells_Left:=regs.bx;
  249. END;
  250.  
  251. procedure Get_Local_Map(ptr:MapBuf_ptr);
  252.  var regs:Registers;
  253. BEGIN
  254.  regs.ax:=$21;
  255.  regs.bx:=seg(ptr^);
  256.  regs.cx:=ofs(ptr^);
  257.  intr($e0,regs);
  258. END;
  259.  
  260. procedure Invisibility(invis_flag:integer);
  261.  var regs:Registers;
  262. BEGIN
  263.  regs.ax:=$22;
  264.  regs.bx:=invis_flag;
  265.  intr($e0,regs);
  266. END;
  267.  
  268. function  Get_Shell_Status:integer;
  269.  var regs:Registers;
  270. BEGIN
  271.  regs.ax:=$23;
  272.  intr($e0,regs);
  273.  Get_Shell_Status:=regs.bx;
  274. END;
  275.  
  276. function  IsInvisible:integer;
  277.  var regs:Registers;
  278. BEGIN
  279.  regs.ax:=$24;
  280.  intr($e0,regs);
  281.  IsInvisible:=regs.bx;
  282. END;
  283.  
  284. function  L_Atan2(y,x:integer):integer;
  285.  var regs:Registers;
  286. BEGIN
  287.  regs.ax:=$25;
  288.  regs.bx:=y;
  289.  regs.cx:=x;
  290.  intr($e0,regs);
  291.  L_Atan2:=regs.ax;
  292. END;
  293.  
  294. function Get_Robot_Id:integer;
  295. BEGIN
  296.  regs.ax:=$26;
  297.  intr($e0,regs);
  298.  Get_Robot_Id:=regs.ax;
  299. END;
  300.  
  301. function Check_Iff(Id:integer):integer;
  302. BEGIN
  303.  regs.ax:=$28;
  304.  regs.bx:=Id;
  305.  intr($e0,regs);
  306.  Check_Iff:=regs.ax;
  307. END;
  308.  
  309. function Get_Team_Id:integer;
  310. BEGIN
  311.  regs.ax:=$2b;
  312.  intr($e0,regs);
  313.  Get_Team_Id:=regs.ax;
  314. END;
  315.  
  316. function    Configure(speed,manouevre,range,armour,acceleration,invisibility:integer):integer;
  317.  var regs:Registers;
  318. BEGIN
  319.  regs.ax:=$80;
  320.  regs.bx:=(speed and 7) + ((manouevre and 7) shl 4) + ((range and 7) shl 8)+
  321.         ((armour and 7) shl 12);
  322.  regs.cx:=(acceleration and 7) + ((invisibility and 1) shl 3);
  323.  
  324.  intr($e0,regs);
  325.  Configure:=regs.ax;
  326. END;
  327.  
  328. end.
  329.